# === 第一阶段：构建可执行文件 ===
FROM python:3.11-alpine AS builder

# 安装编译依赖（PyInstaller + 项目依赖如 cryptography, pymysql）
RUN apk add --no-cache \
    gcc \
    musl-dev \
    libc-dev \
    linux-headers \
    libffi-dev \
    openssl-dev \
    mariadb-connector-c-dev

# 创建项目目录
WORKDIR /app

# 复制依赖并安装（排除测试工具）
COPY requirements.txt .
RUN pip install --user \
    Flask==2.3.3 \
    Werkzeug==2.3.7 \
    SQLAlchemy==2.0.23 \
    PyMySQL==1.1.0 \
    cryptography==41.0.7 \
    bcrypt==4.1.2 \
    requests==2.31.0 \
    pycryptodome==3.19.0 \
    python-dateutil==2.8.2 \
    typing-extensions==4.8.0 \
    python-dotenv==1.0.0 \
    pyinstaller

# 👉 关键：复制整个项目（所有脚本、模块、资源）
COPY . .

# 打包 start_webdav.py（主服务）
# --add-data 用于包含非代码资源（格式：SRC:DST，Windows用; Linux用:）
# 示例：包含 .env, templates/, static/
RUN ~/.local/bin/pyinstaller \
    --onefile \
    --strip \
    --noconfirm \
    --clean \
    --distpath /dist \
    --name start_webdav \
    --add-data ".env:." \
    --add-data "templates:templates" \
    --add-data "static:static" \
    --hidden-import "models.user" \
    --hidden-import "handlers.webdav_handler" \
    --hidden-import "utils.helpers" \
    start_webdav.py

# 打包 manage.py（管理脚本）
RUN ~/.local/bin/pyinstaller \
    --onefile \
    --strip \
    --noconfirm \
    --clean \
    --distpath /dist \
    --name manage \
    --add-data ".env:." \
    --hidden-import "models.user" \
    --hidden-import "utils.helpers" \
    manage.py

# === 第二阶段：极小运行时镜像 ===
FROM alpine:latest

# 安装运行时最小依赖（必须！）
RUN apk add --no-cache \
    libgcc \
    libstdc++ \
    libc6-compat \
    ca-certificates \
    mariadb-connector-c

# 创建非 root 用户
RUN adduser -D -u 1001 appuser
USER appuser

# 创建工作目录
WORKDIR /app

# 👉 复制两个可执行文件
COPY --from=builder --chown=appuser:appuser /dist/start_webdav ./
COPY --from=builder --chown=appuser:appuser /dist/manage ./

# 👉 复制资源文件（PyInstaller 打包时已内嵌，但部分文件需外置？）
# 注意：PyInstaller 使用 --add-data 会把资源打包进二进制，通常不需要额外复制！
# 除非你希望配置文件可外部挂载修改（如 .env），可选择性复制：

COPY --from=builder --chown=appuser:appuser /app/.env ./
# COPY --from=builder --chown=appuser:appuser /app/templates ./templates/
# COPY --from=builder --chown=appuser:appuser /app/static ./static/

# 设置 PATH
ENV PATH="/app:$PATH"

# 默认运行主服务
ENTRYPOINT ["./start_webdav"]